扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
将对象的使用与对象的创建分开。对象的使用者不负责创建对象,只需知道如何获取需要的对象。这样,当被使用对象的创建过程需要变更或扩展时,对象的使用者无须变动,只要对专门负责创建该对象的对象工厂做必要的变更或扩展即可。
当 BasicProduct 有新的子产品 ExProduct3 要应用到系统时, Factory 的 createProduct()
需要简单修改,增加一个“ else if ”分支,没有完全实现“对扩展开放,对修改封闭”。但当明确产品就是有限的几种时,仍是有效且常用的。
当 BasicProduct 有新的子类 ExProduct3 要应用到系统时,新建一个对应的扩展自
BasicFactory 的 ExFactory3 即可,现有类无需修改,实现了“对扩展开放,对修改封闭”。
控制系统最多存在某个类的一个实例。很容易将 Singleton Pattern 扩展为控制系统只能
创建某个类的有限个实例的情形。系统中大部分管理服务对象都是单实例的。例如,系统存在多个用户实例,但只存在一个用户管理者对象。
public class Singleton { private static Singleton instance = null ;
private Singleton() {}; // 控制外部不能自行创建 Sigleton 实例
public static Singleton getInstance() { if ( null == instance ) { instance = new Singleton(); } return instance ; } } |
当一个产品( Product )由多个部分( Part1 , Part2 , … , Partn )组成,而各个部分又有
不同的构造方式时。将产品各部分的构造和产品的组装分离,就是 Builder Pattern 。 Builder 是对产品各部分构造的抽象,而 Director 负责使用指定的 Builder 组装产品。这样,当系统有新的产品各部分构造方式需要加入时,只需实现继承自 Builder 的 ConcreteBuilder3 即可,系统其他类无需修改,实现了“对扩展开放,对修改关闭”。
给定一个对象实例 A ,得到一个另一个对象实例 B : B 的类型与 A 同, B 的内容与 A
相同。常称 B 为 A 的克隆或副本。
Java 对象模型直接支持 Prototype Pattern ,因为 Java 自带克隆机制。 查看本文来源婵犵數濮烽。浠嬪焵椤掆偓閸熷潡鍩€椤掆偓缂嶅﹪骞冨Ο璇茬窞闁归偊鍓涢悾娲⒑闂堟单鍫ュ疾濠婂嫭鍙忔繝濠傜墛閸嬨劍銇勯弽銊с€掗柟钘夊暣閺岀喖鎮滈埡鍌涚彋閻庤娲樺畝绋跨暦閸洖鐓涢柛灞剧矋濞堟悂姊绘担绛嬪殐闁搞劋鍗冲畷銏ゅ冀椤愩儱小闂佹寧绋戠€氼參宕伴崱妯镐簻闁靛牆鎳庢慨顒€鈹戦埥鍡椾簼婵犮垺锚铻炴俊銈呮噺閸嬪倹绻涢崱妯诲碍閻庢艾顦甸弻宥堫檨闁告挾鍠庨锝夘敆娓氬﹦鐭楁繛鎾村焹閸嬫捇鏌e☉娆愬磳闁哄本绋戦埞鎴﹀川椤曞懏鈻婄紓鍌欑劍椤ㄥ懘鎯岄崒鐐靛祦閹兼番鍔岄悞鍨亜閹烘垵顏╅悗姘槹閵囧嫰寮介妸褎鍣ョ紓浣筋嚙濡繈寮婚悢纰辨晣鐟滃秹鎮橀懠顒傜<閺夊牄鍔庣粻鐐烘煛鐏炶姤鍠橀柡浣瑰姍瀹曠喖顢橀悩铏钒闂備浇宕垫慨鎶芥⒔瀹ュ鍨傞柦妯猴級閿濆绀嬫い鏍ㄧ☉濞堟粓姊虹涵鍛【妞ゎ偅娲熼崺鈧い鎺嗗亾闁挎洩濡囧Σ鎰板籍閸繄顓洪梺缁樺姇瀵剙螖閸涱喚鍘搁梺鍓插亽閸嬪嫰鎮橀敃鍌涚厱閻庯綆鍋嗘晶顒傜磼閸屾稑绗ч柟鐟板閹煎湱鎲撮崟闈涙櫏闂傚倷绀侀幖顐も偓姘卞厴瀹曞綊鏌嗗鍛紱閻庡箍鍎遍ˇ浼村磿瀹ュ鐓曢柡鍥ュ妼婢ь垰霉閻樿秮顏堟箒闂佹寧绻傚Λ妤呭煝閺囥垺鐓冪憸婊堝礈濮樿泛钃熼柕濞у嫷鍋ㄩ梺缁樺姇椤曨參鍩㈤弴銏″€甸柨婵嗗€瑰▍鍥ㄣ亜韫囨稐鎲鹃柡灞炬礋瀹曢亶顢橀悢濂変紦